home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / chrome / browser.jar / content / browser / bookmarks / addBookmark.js next >
Text File  |  2006-07-28  |  10KB  |  264 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is mozilla.org code.
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 1998
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *   Ben Goodger <ben@netscape.com> (Original Author)
  24.  *
  25.  * Alternatively, the contents of this file may be used under the terms of
  26.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  27.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  28.  * in which case the provisions of the GPL or the LGPL are applicable instead
  29.  * of those above. If you wish to allow use of your version of this file only
  30.  * under the terms of either the GPL or the LGPL, and not to allow others to
  31.  * use your version of this file under the terms of the MPL, indicate your
  32.  * decision by deleting the provisions above and replace them with the notice
  33.  * and other provisions required by the GPL or the LGPL. If you do not delete
  34.  * the provisions above, a recipient may use your version of this file under
  35.  * the terms of any one of the MPL, the GPL or the LGPL.
  36.  *
  37.  * ***** END LICENSE BLOCK ***** */
  38.  
  39. /**
  40.  * Add Bookmark Dialog. 
  41.  * ====================
  42.  * 
  43.  * This is a generic bookmark dialog that allows for bookmark addition
  44.  * and folder selection. It can be opened with various parameters that 
  45.  * result in appearance/purpose differences and initial state. 
  46.  * 
  47.  * Use: Open with 'openDialog', with the flags 
  48.  *        'centerscreen,chrome,dialog=no,resizable=yes'
  49.  * 
  50.  * Parameters: 
  51.  *   Apart from the standard openDialog parameters, this dialog can 
  52.  *   be passed additional information, which gets mapped to the 
  53.  *   window.arguments array:
  54.  * 
  55.  *   window.arguments[0]: Bookmark Name. The value to be prefilled
  56.  *                        into the "Name: " field (if visible).
  57.  *   window.arguments[1]: Bookmark URL: The location of the bookmark.
  58.  *                        The value to be filled in the "Location: "
  59.  *                        field (if visible).
  60.  *   window.arguments[2]: Bookmark Folder. The RDF Resource URI of the
  61.  *                        folder that this bookmark should be created in.
  62.  *   window.arguments[3]: Bookmark Charset. The charset that should be
  63.  *                        used when adding a bookmark to the specified
  64.  *                        URL. (Usually the charset of the current 
  65.  *                        document when launching this window). 
  66.  *   window.arguments[4]: The mode of operation. See notes for details.
  67.  *   window.arguments[6]: If the bookmark should become a web panel.
  68.  *
  69.  * Mode of Operation Notes:
  70.  * ------------------------
  71.  * This dialog can be opened in four different ways by using a parameter
  72.  * passed through the call to openDialog. The 'mode' of operation
  73.  * of the window is expressed in window.arguments[4]. The valid modes are:
  74.  *
  75.  * 1) <default> (no fifth open parameter).
  76.  *      Opens this dialog with the bookmark Name, URL and folder selection
  77.  *      components visible. 
  78.  * 2) "newBookmark" (fifth open parameter = String("newBookmark"))
  79.  *      Opens the dialog as in (1) above except the folder selection tree
  80.  *      is hidden. This type of mode is useful when the creation folder 
  81.  *      is pre-determined.
  82.  * 3) "selectFolder" (fifth open parameter = String("selectFolder"))
  83.  *      Opens the dialog as in (1) above except the Name/Location section
  84.  *      is hidden, and the dialog takes on the utility of a Folder chooser.
  85.  *      Used when the user must select a Folder for some purpose. 
  86.  */
  87.  
  88. var gFld_Name   = null;
  89. var gFld_URL    = null; 
  90. var gFolderTree = null;
  91.  
  92. var gBookmarkCharset = null;
  93.  
  94. var gSelectItemObserver = null;
  95.  
  96. var gCreateInFolder = "NC:NewBookmarkFolder";
  97.  
  98. function Startup()
  99. {
  100.   initServices();
  101.   initBMService();
  102.   gFld_Name = document.getElementById("name");
  103.   gFld_URL = document.getElementById("url");
  104.   var bookmarkView = document.getElementById("bookmarks-view");
  105.  
  106.   var shouldSetOKButton = true;
  107.   if ("arguments" in window) {
  108.     var ind;
  109.     var folderItem = null;
  110.     var arg;
  111.     if (window.arguments.length < 5)
  112.       arg = null;
  113.     else
  114.       arg = window.arguments[4];
  115.     switch (arg) {
  116.     case "selectFolder":
  117.       // If we're being opened as a folder selection window
  118.       document.getElementById("bookmarknamegrid").setAttribute("hidden", "true");
  119.       document.getElementById("createinseparator").setAttribute("hidden", "true");
  120.       document.getElementById("nameseparator").setAttribute("hidden", "true");
  121.       document.title = document.documentElement.getAttribute("title-selectFolder");
  122.       shouldSetOKButton = false;
  123.       if (window.arguments[2])
  124.         folderItem = RDF.GetResource(window.arguments[2]);
  125.       if (folderItem) {
  126.         ind = bookmarkView.treeBuilder.getIndexOfResource(folderItem);
  127.         bookmarkView.treeBoxObject.view.selection.select(ind);
  128.       }
  129.       break;
  130.     case "newBookmark":
  131.       setupFields();
  132.       if (window.arguments[2])
  133.         gCreateInFolder = window.arguments[2];
  134.       document.getElementById("folderbox").setAttribute("hidden", "true");
  135.       sizeToFit();
  136.       break;
  137.     default:
  138.       // Regular Add Bookmark
  139.       setupFields();
  140.       if (window.arguments[2]) {
  141.         gCreateInFolder = window.arguments[2];
  142.         folderItem = bookmarkView.rdf.GetResource(gCreateInFolder);
  143.         if (folderItem) {
  144.           ind = bookmarkView.treeBuilder.getIndexOfResource(folderItem);
  145.           bookmarkView.treeBoxObject.view.selection.select(ind);
  146.         }
  147.       }
  148.     }
  149.   }
  150.   
  151.   if (shouldSetOKButton)
  152.     onFieldInput();
  153.   if (document.getElementById("bookmarknamegrid").hasAttribute("hidden")) {
  154.     bookmarkView.tree.focus();
  155.     if (bookmarkView.currentIndex == -1)
  156.       bookmarkView.treeBoxObject.view.selection.select(0);
  157.   }
  158.   else {
  159.     gFld_Name.select();
  160.     gFld_Name.focus();
  161.   }
  162.  
  163. function sizeToFit()
  164. {
  165.   var dialogElement = document.documentElement;
  166.   dialogElement.removeAttribute("persist");
  167.   dialogElement.removeAttribute("height");
  168.   dialogElement.removeAttribute("width");
  169.   dialogElement.setAttribute("style", dialogElement.getAttribute("style"));
  170.   sizeToContent();
  171. }
  172.  
  173. function setupFields()
  174. {
  175.   // New bookmark in predetermined folder. 
  176.   gFld_Name.value = window.arguments[0] || "";
  177.   gFld_URL.value = window.arguments[1] || "";
  178.   onFieldInput();
  179.   gFld_Name.select();
  180.   gFld_Name.focus();
  181.   gBookmarkCharset = window.arguments[3] || null;
  182. }
  183.  
  184. function onFieldInput()
  185. {
  186.   const ok = document.documentElement.getButton("accept");
  187.   ok.disabled = gFld_URL.value == "" ||
  188.                 gFld_Name.value == "";
  189. }    
  190.  
  191. function onOK()
  192. {
  193.   if (!document.getElementById("folderbox").hasAttribute("hidden")) {
  194.     var bookmarkView = document.getElementById("bookmarks-view");
  195.     var currentIndex = bookmarkView.currentIndex;
  196.     if (currentIndex != -1)
  197.       gCreateInFolder = bookmarkView.treeBuilder.getResourceAtIndex(currentIndex).Value;
  198.   }
  199.   // In Select Folder Mode, do nothing but tell our caller what
  200.   // folder was selected. 
  201.   if (window.arguments.length > 4 && window.arguments[4] == "selectFolder")
  202.     window.arguments[5].target = BookmarksUtils.getTargetFromFolder(bookmarkView.treeBuilder.getResourceAtIndex(currentIndex));
  203.   else {
  204.     // Otherwise add a bookmark to the selected folder. 
  205.     var rFolder = RDF.GetResource(gCreateInFolder);
  206.     try {
  207.       RDFC.Init(BMDS, rFolder);
  208.     }
  209.     catch (e) {
  210.       // No "NC:NewBookmarkFolder" exists, just append to the root.
  211.       rFolder = RDF.GetResource("NS1:FoldersRoot");
  212.       RDFC.Init(BMDS, rFolder);
  213.     }
  214.  
  215.     // if no URL was provided, do nothing
  216.     if (!gFld_URL.value)
  217.       return;
  218.  
  219.     var url, rSource;
  220.    
  221.     url = getNormalizedURL(gFld_URL.value);
  222.     rSource = BMDS.createBookmark(gFld_Name.value, url, null, null, gBookmarkCharset, false, "");
  223.     if (window.arguments.length > 4 && window.arguments[4] == "newBookmark") {
  224.       window.arguments[5].newBookmark = rSource;
  225.     }    
  226.     var selection = BookmarksUtils.getSelectionFromResource(rSource);
  227.     var target    = BookmarksUtils.getTargetFromFolder(rFolder);
  228.     BookmarksUtils.insertAndCheckSelection("newbookmark", selection, target);
  229.   }
  230. }
  231.  
  232. function getNormalizedURL(url)
  233. {
  234.   // Check to see if the item is a local directory path, and if so, convert
  235.   // to a file URL so that aggregation with rdf:files works
  236.   try {
  237.     const kLF = Components.classes["@mozilla.org/file/local;1"]
  238.                           .createInstance(Components.interfaces.nsILocalFile);
  239.     kLF.initWithPath(url);
  240.     if (kLF.exists()) {
  241.       var ioService = Components.classes["@mozilla.org/network/io-service;1"]
  242.                                 .getService(Components.interfaces.nsIIOService);
  243.       var fileHandler = ioService.getProtocolHandler("file")
  244.                                  .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
  245.  
  246.       url = fileHandler.getURLSpecFromFile(kLF);
  247.     }
  248.   }
  249.   catch (e) {
  250.   }
  251.  
  252.   return url;
  253. }
  254.  
  255. function createNewFolder ()
  256. {
  257.   var bookmarksView = document.getElementById("bookmarks-view");
  258.   var resource = bookmarksView.treeBuilder.getResourceAtIndex(bookmarksView.currentIndex);
  259.   var target = BookmarksUtils.getTargetFromFolder(resource);
  260.   BookmarksCommand.createNewFolder(target);
  261. }
  262.  
  263.